1 /*
2  * The MIT License (MIT)
3  *
4  * Copyright (c) 2014 Devisualization (Richard Andrew Cattermole)
5  *
6  * Permission is hereby granted, free of charge, to any person obtaining a copy
7  * of this software and associated documentation files (the "Software"), to deal
8  * in the Software without restriction, including without limitation the rights
9  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10  * copies of the Software, and to permit persons to whom the Software is
11  * furnished to do so, subject to the following conditions:
12  *
13  * The above copyright notice and this permission notice shall be included in all
14  * copies or substantial portions of the Software.
15  *
16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22  * SOFTWARE.
23  */
24 module devisualization.util.opengl.function_wrappers.v15;
25 import gl = derelict.opengl3.gl;
26 import glarb = derelict.opengl3.arb;
27 
28 // no need to polute name space any further when its args don't change
29 public import derelict.opengl3.gl : glIsQuery, glIsBuffer;
30 
31 enum QueryTargets {
32     SamplesPassed = gl.GL_SAMPLES_PASSED,
33     AnySamplesPassed = gl.GL_ANY_SAMPLES_PASSED,
34     AnySamplesPassedConservative = gl.GL_ANY_SAMPLES_PASSED_CONSERVATIVE,
35     PrimitivesGenerated = gl.GL_PRIMITIVES_GENERATED,
36     TransformFeedbackPrimitivesWritten = gl.GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN,
37     TimeElapsed = gl.GL_TIME_ELAPSED
38 }
39 
40 enum QueryTarget {
41     SamplesPassed = gl.GL_SAMPLES_PASSED,
42     AnySamplesPassed = gl.GL_ANY_SAMPLES_PASSED,
43     AnySamplesPassedConservative = gl.GL_ANY_SAMPLES_PASSED_CONSERVATIVE,
44     PrimitivesGenerated = gl.GL_PRIMITIVES_GENERATED,
45     TransformFeedbackPrimitivesWritten = gl.GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN,
46     TimeElapsed = gl.GL_TIME_ELAPSED,
47     TimeStamp = gl.GL_TIMESTAMP
48 }
49 
50 enum QueryNames {
51     CurrentQuery = gl.GL_CURRENT_QUERY,
52     QueryCounterBits = gl.GL_QUERY_COUNTER_BITS
53 }
54 
55 enum QueryResultNames {
56     Result = gl.GL_QUERY_RESULT,
57     ResultAvailable = gl.GL_QUERY_RESULT_AVAILABLE
58 }
59 
60 enum BindBufferTargets {
61     ArrayBuffer = gl.GL_ARRAY_BUFFER,
62     AtomicCounterBuffer = gl.GL_ATOMIC_COUNTER_BUFFER,
63     CopyReadBuffer = gl.GL_COPY_READ_BUFFER,
64     CopyWriteBuffer = gl.GL_COPY_WRITE_BUFFER,
65     DrawIndirectBuffer = gl.GL_DRAW_INDIRECT_BUFFER,
66     DispatchIndirectBuffer = gl.GL_DISPATCH_INDIRECT_BUFFER,
67     ElementArrayBuffer = gl.GL_ELEMENT_ARRAY_BUFFER,
68     PixelPackBuffer = gl.GL_PIXEL_PACK_BUFFER,
69     PixelUnpackBuffer = gl.GL_PIXEL_UNPACK_BUFFER,
70     QueryBuffer = gl.GL_QUERY_BUFFER,
71     ShaderStorageBuffer = gl.GL_SHADER_STORAGE_BUFFER,
72     TextureBuffer = gl.GL_TEXTURE_BUFFER,
73     TransformFeedbackBuffer = gl.GL_TRANSFORM_FEEDBACK_BUFFER,
74     UniformBuffer = gl.GL_UNIFORM_BUFFER
75 }
76 
77 enum BufferUsages {
78     StreamDraw = gl.GL_STREAM_DRAW,
79     StreamRead = gl.GL_STREAM_READ,
80     StreamCopy = gl.GL_STREAM_COPY,
81     StaticDraw = gl.GL_STATIC_DRAW,
82     StaticRead = gl.GL_STATIC_READ,
83     StaticCopy = gl.GL_STATIC_COPY,
84     DynamicDraw = gl.GL_DYNAMIC_DRAW,
85     DynamicRead = gl.GL_DYNAMIC_READ,
86     DynamicCopy = gl.GL_DYNAMIC_COPY
87 }
88 
89 enum BufferAccess {
90     ReadOnly = gl.GL_READ_ONLY,
91     WriteOnly = gl.GL_WRITE_ONLY,
92     ReadWrite = gl.GL_READ_WRITE
93 }
94 
95 enum GetBufferTargets {
96     ArrayBuffer = gl.GL_ARRAY_BUFFER,
97     ElementArrayBuffer = gl.GL_ELEMENT_ARRAY_BUFFER
98 }
99 
100 enum GetBufferValues {
101     BufferSize = gl.GL_BUFFER_SIZE,
102     BufferUsage = gl.GL_BUFFER_USAGE
103 }
104 
105 uint[] glGenQueries(int n) {
106     uint[] ret;
107     gl.glGenQueries(n, ret.ptr);
108     return ret;
109 }
110 
111 uint glGenQueries() {
112     uint ret;
113     gl.glGenQueries(1, &ret);
114     return ret;
115 }
116 
117 void glDeleteQueries(uint[] ids) {
118     gl.glDeleteQueries(cast(uint) ids.length, ids.ptr);
119 }
120 
121 void glDeleteQueries(uint id) {
122     gl.glDeleteQueries(1, &id);
123 }
124 
125 void glBeginQuery(QueryTargets target, uint id) {
126     gl.glBeginQuery(cast(gl.GLenum)target, id);
127 }
128 
129 void glEndQuery(QueryTargets target) {
130     gl.glEndQuery(cast(gl.GLenum)target);
131 }
132 
133 void glGetQueryiv(QueryTarget target, QueryNames pname, int[] params) {
134     gl.glGetQueryiv(cast(gl.GLenum)target, cast(gl.GLenum)pname, params.ptr);
135 }
136 
137 int[] glGetQueryObjectiv(uint id, QueryResultNames pname) {
138     int[] ret;
139     gl.glGetQueryObjectiv(id, cast(gl.GLenum)pname, ret.ptr);
140     return ret;
141 }
142 
143 uint[] glGetQueryObjectuiv(uint id, QueryResultNames pname) {
144     uint[] ret;
145     gl.glGetQueryObjectuiv(id, cast(gl.GLenum)pname, ret.ptr);
146     return ret;
147 }
148 
149 long[] glGetQueryObjecti64v(uint id, QueryResultNames pname) {
150     long[] ret;
151     glarb.glGetQueryObjecti64v(id, cast(gl.GLenum)pname, ret.ptr);
152     return ret;
153 }
154 
155 ulong[] glGetQueryObjectui64v(uint id, QueryResultNames pname) {
156     ulong[] ret;
157     glarb.glGetQueryObjectui64v(id, cast(gl.GLenum)pname, ret.ptr);
158     return ret;
159 }
160 
161 void glBindBuffer(BindBufferTargets target, uint buffer) {
162     gl.glBindBuffer(cast(gl.GLenum)target, buffer);
163 }
164 
165 void glDeleteBuffer(uint id) {
166     gl.glDeleteBuffers(1, &id);
167 }
168 
169 void glDeleteBuffers(uint[] buffers) {
170     gl.glDeleteBuffers(cast(int)buffers.length, buffers.ptr);
171 }
172 
173 uint glGenBuffer() {
174     uint ret;
175     gl.glGenBuffers(1, &ret);
176     return ret;
177 }
178 
179 uint[] glGenBuffers(int n) {
180     uint[] ret;
181     gl.glGenBuffers(n, ret.ptr);
182     return ret;
183 }
184 
185 void glBufferData(BindBufferTargets target, void[] data, BufferUsages usage) {
186     gl.glBufferData(cast(gl.GLenum)target, cast(int)data.length, data.ptr, cast(gl.GLenum)usage);
187 }
188 
189 void glBufferSubData(BindBufferTargets target, int offset, void[] data) {
190     gl.glBufferSubData(cast(gl.GLenum)target, cast(int)offset, cast(int)data.length, data.ptr);
191 }
192 
193 void glGetBufferSubData(BindBufferTargets target, int offset, ref void[] data) {
194     gl.glGetBufferSubData(cast(gl.GLenum)target, cast(int)offset, cast(int)data.length, data.ptr);
195 }
196 
197 void* glMapBuffer(BindBufferTargets target, BufferAccess access) {
198     return gl.glMapBuffer(cast(gl.GLenum)target, cast(gl.GLenum)access);
199 }
200 
201 bool glUnmapBuffer(BindBufferTargets target) {
202     return cast(bool)gl.glUnmapBuffer(cast(gl.GLenum)target);
203 }
204 
205 void glGetBufferPointerv(BindBufferTargets target, void[] params) {
206     gl.glGetBufferPointerv(cast(gl.GLenum)target, gl.GL_BUFFER_MAP_POINTER, params.ptr);
207 }
208 
209 int[] glGetBufferParameteriv(GetBufferTargets target, GetBufferValues value) {
210     int[] ret;
211     gl.glGetBufferParameteriv(cast(gl.GLenum)target, value, ret.ptr);
212     return ret;
213 }